package com.minisoft.rxjava;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.reactivestreams.Subscriber;

@Slf4j
public class SchedulerDemo {
    /**
     *演示Schedulers的基本使用
     */
    @Test
    public void testScheduler() throws InterruptedException {
        //被观察者
//        Observable observable = Observable.create(
//                new Observable.OnSubscribe<String>() {
//                    @Override
//                    public void call(Subscriber<? super String> subscriber) {
//                        for (int i = 0; i < 5; i++) {
//                            log.info("produce ->" + i);
//                            subscriber.onNext(String.valueOf(i));
//                        }
//                        subscriber.onCompleted();
//                    }
//                });

        //订阅Observable与Subscriber之间依然通过subscribe()进行关联
//        observable
//                //使用具有线程缓存机制的可复用线程,主要改变的是弹射的线程
//                .subscribeOn(Schedulers.io())
//                //每执行一个任务创建一个新的线程,主要改变的是订阅的线程
//                .observeOn(Schedulers.newThread())
//                .subscribe(s -> {
//                    log.info("consumer ->" + s);
//                });

        Thread.sleep(Integer.MAX_VALUE);
    }
}